timeit : NumPy vs listes Pythonimport numpy as np
import timeit
On crée une liste Python et un tableau NumPy de même taille pour la comparaison.
size = 1_000_000
python_list = list(range(1, size + 1))
numpy_array = np.arange(1, size + 1)
timeitdef python_sum_squares():
return sum(x*x for x in python_list)
python_time = timeit.timeit(python_sum_squares, number=10)
print(f"Liste Python : {python_time:.5f} secondes pour 10 exécutions")
print(f"Moyenne par exécution : {python_time/10:.5f} secondes")
def numpy_sum_squares():
return np.sum(numpy_array**2)
numpy_time = timeit.timeit(numpy_sum_squares, number=10)
print(f"Tableau NumPy : {numpy_time:.5f} secondes pour 10 exécutions")
print(f"Moyenne par exécution : {numpy_time/10:.5f} secondes")
Voici ce que vous pourriez observer sur une machine standard (les valeurs exactes dépendent de votre matériel) :
| Méthode | Temps total pour 10 exécutions | Temps moyen par exécution |
|---|---|---|
| Liste Python | ~1.5 - 3.0 secondes | ~0.15 - 0.30 seconde |
| Tableau NumPy | ~0.01 - 0.05 secondes | ~0.001 - 0.005 seconde |
Consigne :
size = 10_000, 100_000, 1_000_000, 10_000_000).timeit ?timeit exécute le code plusieurs fois et retourne le temps total, ce qui permet de lisser les variations dues à d’autres processus système.Pour une comparaison encore plus précise, on peut utiliser timeit.repeat et calculer la moyenne et l’écart-type :
python_times = timeit.repeat(python_sum_squares, number=10, repeat=5)
numpy_times = timeit.repeat(numpy_sum_squares, number=10, repeat=5)
print(f"Liste Python : moyenne = {np.mean(python_times):.5f}s, écart-type = {np.std(python_times):.5f}s")
print(f"Tableau NumPy : moyenne = {np.mean(numpy_times):.5f}s, écart-type = {np.std(numpy_times):.5f}s")